package coop.tecso.modelo1.core;

import java.util.ArrayList;
import java.util.List;
import coop.tecso.modelo1.exceptions.ValidationException;
import java.util.regex.Pattern;
import java.util.regex.Matcher;


public class Cuenta extends Crud implements Entidad{

	private Usuario usuario;
	private Banco banco;
	private List<Historico> historicos;
	private String CBU;
	private Integer id;
	private Double Saldo;
	
		
	/** Constructor Cuenta **/
	
	public Cuenta(String CBU, Usuario usuario, Banco banco){
		this.CBU=CBU;
		this.usuario=usuario;
		this.banco=banco;
		this.Saldo=0.0; //TODO: agregar campo en la tabla cuenta y modificar el string para el insert 
	}
	
		
	/** Validate CBU **/
	
	public static void validarCBU(String CBU) throws ValidationException{
				
		if(CBU==null){
			System.out.println("CBU es null");
			throw new ValidationException("CBU es null");
		}
		if (CBU.length()!=8){
			System.out.println("CBU no tiene la longitud esperada");
			throw new ValidationException("CBU no tiene la longitud esperada");
		}
		
		Pattern p = Pattern.compile("[aA-zZ]{3}[0-9]{5}");
        Matcher m = p.matcher(CBU);
        if (!m.find()){
        	System.out.println("CBU no cumple con el formato esperado: "+CBU);
        	throw new ValidationException("CBU no cumple con el formato esperado");
        } else {
        	System.out.println("CBU ingresado correctamente: "+CBU);
        }
		
	}
	
		
	/** Strings Statements **/
	
	public String getInsertSQLStatement(){
		return ("insert into cuenta(id, cbu) " +
				"values(" + this.getId() + ", '"+ this.getCBU() + "')");
	}
	
	public String getUpdateSQLStatement(){
		
		if (dirty[0]==true){
			return ("update cuenta set cbu="+this.getCBU()
					+" where id="+this.getId());	
		} else {
			return null;
		}
		
		
	}
	
	public String getDeleteSQLStatement(){
		return ("delete from cuenta where id="+this.getId());
	}
	
/*
	//TODO: FRUTA?
	public String getConsultaSQLStatement() {
		return "select * from cuenta where cbu="+this.CBU;
	}
*/	

	
	/** Getters and Setters **/
	
	public String getCBU() {
		return CBU;
	}

	public void setCBU(String CBU) {
		this.CBU = CBU;
		this.dirty[0]=true;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}
	
	public Double getSaldo() {
		return Saldo;
	}


	public void setSaldo(Double saldo) {
		Saldo = saldo;
	}


	public List<String> getbeanProperties(){
		List<String> beanProperties = new ArrayList<String>();
		beanProperties.add("CBU");
		beanProperties.add("Saldo");
		beanProperties.add("id");
		return beanProperties;
	}

	
	
}
